package main

import (
	_ "cld-quick-cli/config"
	"cld-quick-cli/router"
	_ "cld-quick-cli/setup"
	"context"
	"go.uber.org/zap"
	"os"
	"os/signal"
	"syscall"
	"time"
)

var err error

func Go() {
	/*
		初始化 gin web服务器
	*/
	server := router.CreateServer()
	go func() {
		err := server.ListenAndServe()
		if err != nil {
			// 这里不要使用 Fatal 他会直接退出程序，热关机会失效！
			zap.L().Info(err.Error())
		}
	}()
	quit := make(chan os.Signal, 1)                      // 创建一个接收信号的通道
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) // 此处不会阻塞
	<-quit                                               //如果没有信号发送则会阻塞在这里！
	ctx := context.Background()
	// 5秒内优雅关闭服务（将未处理完的请求处理完再关闭服务），超过5秒就超时退出
	timeoutCtx, cancel := context.WithTimeout(ctx, time.Second*5)
	defer cancel()
	// Shutdown 接受一个 context 可以控制 Shutdown
	err = server.Shutdown(timeoutCtx)
	if err != nil {
		zap.L().Info(err.Error())
	}
}
func main() {
	Go()
}
